package com.detection.hikvision.service;

import com.detection.common.domain.hikvision.accessControlDoControl.AccessControlDoControlResultView;
import com.detection.common.domain.hikvision.accessControlInfo.AccessControlInfoResultView;
import com.detection.common.domain.hikvision.accessControlOnline.AccessControlPageResultView;
import com.detection.common.domain.hikvision.accessControlStates.AccessControlStateResultView;

import java.util.HashMap;

/**
 * @author 苑福建
 * @date 2022/10/26 下午2:39
 */
public interface AccessControlService {

    /**
     * 获取门禁设备监控点信息
     * @param regionId 区域
     * @param pageNo 页码
     * @param pageSize 每页查询数量
     * @return
     */
    AccessControlPageResultView getAccessControlList(String regionId, Integer pageNo, Integer pageSize);

    /**
     * 获取门禁设备监控点信息
     * @param regionId 区域
     * @param pageNo 页码
     * @param pageSize 每页查询数量
     * @return
     */
    AccessControlPageResultView getAccessControlList(String regionId,String status, Integer pageNo, Integer pageSize);

    /**
     * 获取单个门禁设备信息是指根据指定的门禁设备唯一标识来获取门禁设备信息。
     * @param acsDevIndexCode 门禁设备唯一标识
     * @return
     */
    AccessControlInfoResultView getAccessControlInfo(String acsDevIndexCode);

    /**
     * 该接口支持门常开、门常闭、门开和门闭四种操作。门常开操作，门会一直处于开状态，不会自动关闭，执行门闭操作，门才会关上；门常闭操作，门会一直处于关毕状态，普通卡刷卡门不会被打开，执行门开操作，门会打开；门开操作，执行门打开动作，超过门打开时间，门会自动关上；门闭操作，执行关门动作，会立即把门关上。
     * 调用该接口，首先要通过获取门禁点资源列表的接口，获取到门禁点唯一编号，然后根据门禁点唯一编号进行反控操作，该接口支持单个和多个门禁点操作，如果所有门禁点反控操作成功，则返回成功，其他情况都返回失败，在失败的情况下，会按每个门禁点返回对应的错误。
     * @param acsDevIndexCodes 门禁设备唯一标识，最大支持10个门禁设备。acsDevIndexCode
     * @param controlType 0-常开  1-门闭 2-门开  3-常闭
     * @return
     */
    AccessControlDoControlResultView getAccessControlDoControl(String[] acsDevIndexCodes, int controlType);

    /**
     * 该接口支持门常开、门常闭、门开和门闭四种操作引起的门状态获取。门常开操作，门会一直处于开状态，不会自动关闭，执行门闭操作，门才会关上；门常闭操作，门会一直处于关毕状态，普通卡刷卡门不会被打开，执行门开操作，门会打开；门开操作，执行门打开动作，超过门打开时间，门会自动关上；门闭操作，执行关门动作，会立即把门关上。
     * 调用该接口，首先要通过获取门禁点资源列表的接口，获取到门禁点唯一编号，然后根据门禁点唯一编号进行门禁点状态状态查询。需要注意的是门通道必须接上门磁才能正常发送门状态变化通知，如果未接门磁，平台无法通过门状态变更通知来更新门状态。
     * @param doorIndexCodes
     * @return
     */
    AccessControlStateResultView getAccessControlStates(String[] doorIndexCodes);
    HashMap<String, String> getAccessControlAcsDoorList();


    AccessControlStateResultView getAllAccessControlStates();

    /**
     * 获取门禁图片地址
     * @param svrIndexCode
     * @param picUri
     * @return
     */
    String getPicUrl(String svrIndexCode,String picUri);

    /**
     * 获取在线门禁数
     * @return
     */
    int countOnLineDoorControl(String regionCode);

    /**
     * 获取离线门禁数
     * @param regionCode
     * @return
     */
    int countOffLineDoorControl(String regionCode);
}
